Pour ce cours vous aurez besoin des fonctions de conversion de binaire, décimal, hexadécimal écrite dans les cours précédents.

Vous pouvez télécharger le fichier ici pour travailler l'ensemble des exercices. Il contient les fonctions dont vous avez besoin.

Représentation du texte en machine

Transmettre un message !

Le codage des lettres afin de transmettre un message n'est pas récent. Citons par exemple :

Un ordinateur ne peux "communiquer" qu'à travers des signaux électrique : 0 ou 1. C'est à dire en binaire. Nous avons vu qu'il était possible de passer de binaire à décimal et de binaire à hexadécimal. L'idée est donc de coder toute sorte de caractère en décimal ou en hexadécimal. Pour faire écrire du texte à une machine, une solution est d'associer chaque caractère à un entier.

Il faut choisir dans un premier temps l'ensemble des caractères à coder.

Charset

Un charset, abréviation de l'anglais "character set", est la donnée de l'ensemble des caractères à coder.

<meta charset=" UTF-8 "> est une ligne de code que vous trouvez dans le "head " d'une page HTML est là pour indiquer la manière d'encoder les caractères présent dans le charset. Ici, cela signifie que l'encodage suivi est au format utf8.

Encodage

L'encodage d'un charset est la mise en relation des caractères que l'on veut coder et avec 1 ou plusieurs octets.

L'encodage ASCII

Au début des années 60, pour encoder un charset qui convient à la langue anglaise a été inventé le codage américain ASCII( American Standard Code for Information Interchange ) permettant de représenter sur 7 bits les caractères d'un clavier anglophone. Le "A " correspond au nombre 65, le "B " correspond au nombre 66,..., le "a " au nombre 97, le chiffre 0 au nombre 48, etc.

Vous pouvez vous rendre sur ce site qui propose d'encoder des caractères avec différents encodages. Ainsi la phrase est encodée en ASCII ainsi : .

En Python, les fonctions qui permettent d'obtenir l'encodage d'un caractère compatible avec la table Unicode (une extension de l'ASCII) sont :

Tester les fonctions ord et chr avec d'autres arguments.

Code de déblocage de la correction :

  1. Donner la représentation en binaire de "A ", "a ", "C " et "c " selon la table ASCII. On pourra utiliser les fonctions déjà réalisées dans le chapitre B2 et les fonctions chr et ord.

  2. Que remarque-t-on ?

  3. Code de déblocage de la correction :

Vers la norme Unicode.

L'encodage ASCII était suffisant pour la langue anglaise (sans accent) mais pas pour toutes les autres. De nombreux systèmes d'encodage pour les autres langues ont donc été créés depuis, par exemple l'ISO 8859-1 ( ou latin-1) pour la langue française pour laquelle les accents sont importants. Ce système reprend les 128 codes ASCII(7 bits : de 0 à 127) et en ajoute 128 (de 128 à 255). C'est donc un codage sur 8 bits.

Le problème est que les 128 codes ajoutés ne sont pas compatibles pour toutes les langues.

On a alors mis en place la norme Unicode au début des années 90 qui offre une compatibilité avec toutes les langues.

Au départ prévu sur 2 octets (65536 caractères), il dispose maintenant de plus de 130 000 caractères

La norme Unicode définit entre autres un ensemble (ou répertoire) de caractères. Chaque caractère est repéré dans cet ensemble par un index entier aussi appelé « point de code ».
Le répertoire Unicode peut contenir plus d'un millions de caractères, les points de code sont compris entre 0 et 0x10FFFF ce qui est bien trop grand pour tenir dans un seul octet (limité à des valeurs entre 0 et 255).
La norme Unicode définit donc des méthodes standardisées pour coder et stocker cet index sous forme de séquence d'octets : UTF-8 ( codé sur 1 à 4 octets) est l'une d'entre elles, avec UTF-16, UTF32 et leurs différentes variantes.

le caractère "€ " (euro) est le 8365ème caractère du répertoire Unicode ; son index, ou « point de code », est donc 8364 (on commence à compter à partir de 0).

Généralement en Unicode, un caractères prend entre 1 et 4 octets ( 1 octet=8 bits). Autrement dit, le moindre texte prend jusqu'à plus de quatre fois plus de place qu'en ASCII. Ce qui pose problème.

La grande majorité des caractères utilisés sont dans la table ASCII codés sur 7bits dans cette table. Il fallait donc trouver un format qui permettait de coder l'ensemble des caractères sans être beaucoup plus gourmand en mémoire que la table ASCII. C'est le format UTF-8.

Le 8 signifie que au minimum un caractère à besoin de 8 bits pour être codé (dont ceux de la table ASCII).

Un caractère en UTF-8 sera don encodé entre 1octet et 4 octets ( pour les caractères les plus rares).

On augmente le coup en mémoire de 1 bit pour les caractères de la table ASCII mais on dispose d'un encodage universel.

Vous pouvez vous rendre sur cette page pour observer la table Unicode.

  1. Consulter la table Unicode.

    Notez bien que chaque code est codé sous la forme de "U+une valeur à 4 caractères en hexadecimal ce qui correspond au 1 à 4 octets.

  2. Voici une fonction deci_en_hexa incomplète qui prend en paramètre un nombre entier correspondant à l'écriture décimale d'un nombre entier et qui renvoie l'écriture héxadécimale sous forme d'une liste de caractères.

    def hexa_en_deci(l:list)->int:
        """Fonction qui prend en paramètre une liste de caractères correspondant à l'écriture hexadécimale d'un nombre
        et qui renvoie l'écriture décimale de ce nombre"""
        # création d'un dictionnaire qui à chaque valeur de la base hexadécimale fait correspondre sa valeur décimale
        dico={str(i):i for i in range(10)}
        dico["A"]=...   # ligne à compléter    
        dico["B"]=...   # ligne à compléter 
        dico["C"]=...   # ligne à compléter 
        dico["D"]=...   # ligne à compléter 
        dico["E"]=...   # ligne à compléter 
        dico["F"]=...   # ligne à compléter 
        # gestion de la valeur décimale renvoyée
        nombre_en_deci=0
        for i in range(len(l)):
            nombre_en_deci+=dico[l[i]]*...   # ligne à compléter 
        return nombre_en_deci
    1. Compléter le script précédent en modifiant les sept lignes à compléter afin que la fonction hexa_en_deci soit correcte.

      Vous pouvez vous aider du travail réalisé lors du second chapitre sur le binaire.

    2. En utilisant la fonction précédente ainsi que chr et/ou ord dans un Jupyter notebook, faites apparaître le caractère བྷ correspondant à la lettre tibétaine appelée "bha" , codé par U+0F57 en Unicode.

    3. Est-il nécessaire de préciser le 0 du 0F57 dans l'appel de fonction que vous réalisez ?

    4. À votre avis, pourquoi avoir donner une table en hexadécimal plutôt qu'en décimal?

Code de déblocage de la correction :

Gestion des fichiers textes en Python

Ouverture et fermeture d'un fichier

Pour sauvegarder durablement des données de session et récupérer des données d'une session précédente, les fichiers sont très utiles.

Pour accéder à un fichier, il faut d'abord le localiser. Ce point sera développer dans la partie 4. Pour simplifier, dans cette partie on considèrera que les fichiers à traiter et le script se trouvent dans le même répertoire.

La fonction open sert à ouvrir un fichier en créant une copie de ce fichier au niveau de la mémoire vive ; la copie est à affecter dans une variable.

La fonction open prend deux paramètres, le nom du fichier et le mode d'ouverture : 'w' pour le mode écriture (write), 'r' pour le mode lecture(read) et 'a' pour le mode ajout (append).

fichier=open('fichier','w')  # ouverture en mode écriture : le fichier peut être modifié
fic=open('fichier','r') # ouverture en mode lecture du contenu du fichier 
fic=open('fichier','a') # ouverture en mode append : on peut ajouter en fin de fichier des chaînes de cractères.

Il faut systématiquement fermer le fichier:

fic.close()

Ecriture

La méthode write

La méthode write prend en paramètre une chaîne de caractères.

Pour forcer le saut de ligne, on écrira \n.

l'écriture d'un fichier se fait en informatique en trois étapes :

  1. Créer un nouveau document Jupyter et l'enregistrer sous le nom decouvrir_write.

  2. Dans le répertoire contenant ce nouveau fichier Jupyter, existe-t-il un fichier nommé fichier.txt ?

    Si vous n'arrivez pas à trouver le répertoire contenant le fichier decouvrir_write.ipynb, vous pouvez utiliser la fonction getcwd expliquée en complément à cet endroit.

  3. Recopier le code suivant dans ce nouveau document Jupyter decouvrir_write puis exécuter-le :

    fic=open('fichier.txt','w')
    fic.write("la nsi,c'est vraiment top \nmême si les maths c'est vraiment génial aussi")
    fic.write("\n")
    fic.write("la nsi,c'est vraiment top"+"\n"+ "même si les maths c'est vraiment génial aussi")
    fic.close()
            
  4. Dans le répertoire contenant le fichier Jupyter exécuté, existe-t-il un fichier nommé fichier.txt ?

  5. Ouvrir ce fichier créé avec un éditeur de texte. Qu'observe-t-on?

  6. Fermer l'éditeur de texte puis exécuter le script suivant :

    fic=open('fichier.txt','w')
    fic.write("Nouveau texte")
    fic.close()
            
  7. Réouvrir le fichier 'fichier.txt'.

    Que conclure quant au rôle de la méthode write ?

Code de déblocage de la correction :

  1. L'extension ".txt" est là pour préciser le format du fichier donc avec quel logiciel le système d'exploitation doit lire le fichier.

  2. La méthode write prend en argument une chaîne de caractères.

    Ainsi, pour écrire la valeur d'un entier, on utilisera la fonction str. Par exemple si a=1 "str(a)" affichera 1.

Écrire une procédure table(n) qui créé un fichier donnant la table de multiplication du chiffre n.

On veut un affichage de ce type :

Faire en sorte que le fichier créé soit de type .txt et s'appelle 'table_de_' suivi de la valeur de n choisie.

Code de déblocage de la correction :

Lecture

Pour cette partie, récupérer le fichier de format .txt compressé ici puis le décompresser dans le répertoire courant de travail de votre Jupyter ou de votre IDLE.

Si vous n'arrivez pas à trouver le répertoire contenant de travail de Jupyter ou de votre IDLE, vous pouvez utiliser la fonction getcwd expliquée en complément à cet endroit.

La méthode read

  1. Reproduire ces lignes de codes :

    fic=open('dormeur.txt','r')
    ch=fic.read()
    fic.close()
    fic=open('dormeur.txt','r')
    ch2=fic.read(12)
    fic.close()
                
  2. Déterminer le type de ch.

  3. Afficher ce que contient ch.

  4. Afficher ce que contient ch2.

Code de déblocage de la correction :

  1. Reproduire ces lignes de codes :

    fic=open('dormeur.txt','r')
    ch=fic.read()
    ch2=fic.read(12)
    fic.close()
                
  2. Afficher ce que contient ch.

  3. Afficher ce que contient ch2.

  4. Expliquer quelle est la différence avec les affichages obtenus à l'exercice précédent.

  5. Reproduire ces lignes de codes :

    fic=open('dormeur.txt','r')
    ch=fic.read(12)
    ch2=fic.read()
    fic.close()
                
  6. Afficher ce que contient ch.

  7. Afficher ce que contient ch2.

  8. Expliquer pourquoi les affichages en début d'exercice diffèrent de ceux de l'exercice précédent.

Code de déblocage de la correction :

Pourquoi faut-il fermer le fichier ouvert en fin d'utilisation ?

Il existe deux autres possibilités pour accéder à un fichier texte sans avoir à prendre garde à fermer correctement le fichier :

Lecture ligne à ligne

Pour obtenir une liste contenant chaque ligne du texte on écrira ch=fic.readlines() ou ch=[x for x in fic].

Observer l'action de ces lignes de codes :

fic=open('dormeur.txt','r')
ch=fic.readlines()
fic2=open('dormeur.txt','r')
ch2=[x for x in fic2]
                

Code de déblocage de la correction :

La méthode rstrip

la commande ch.rstrip() supprimer le caractère de fin de ligne \n comme élément de la liste ch.

Observer l'action de ces lignes de codes :

fic=open('dormeur.txt','r')
l=[]
ch=fic.readlines()
for ligne in ch:
    l.append(ligne.rstrip())
                

Code de déblocage de la correction :

La méthode rstrip() peut être remplacé ici par replace('\n',"") qui permet de remplacer les deux caractères \n par rien donc de les supprimer.

Pas pour ceux de Vitry

À partir du fichier dormeur du val. Écrire une fonction dico_texte(nom)nom est une chaine de caractères correspond au nom d'un fichier txt et qui renvoie un dictionnaire avec comme clé les numéro de ligne du texte et comme valeur la ligne correspondante.

Tester avec le fichier dormeur.txt

La commande ch.split(sep) créé une liste en coupant la chaîne chsuivant le délimitateur sep.

Testez ces codes pour comprendre le fonctionnement de la méthode split.

  1. ch="1;2;3;4;5;6;9;7"
    ch.split(';')
  2. ch="Être ou ne pas être ! Voilà la question !"
    ch.split("e")

Code de déblocage de la correction :

  1. Exécuter ce code dans votre fichier Jupyter.
    fic=open("fichier.csv","w")
    fic.write(str(5)+"\t"+str(8.3)+"\t"+str(1e-4)+"\n")
    fic.write(str(8)+"\t"+str(32.7)+"\t"+str(1e2))
    fic.close()
                            

    À quoi correspond le "\t" ? (vous pouvez ouvrir le fichier créer avec un éditeur de texte ou LibreOffice).

  2. Avec les méthodes rstrip et split, récupérer l'ensemble des valeurs contenues dans le fichier sous forme de liste.

Code de déblocage de la correction :

L'ouverture en mode 'a', pour append = ajouter en français, permet de rajouter une chaîne de caractères en fin d'un fichier en utilisant la méthode write.

  1. Reproduire et exécuter ces lignes de codes :

    fic=open('dormeur.txt','a')
    fic.write("\n")
    fic.write("octobre 1870")
    fic.close()
                
  2. Réouvrir le fichier dormeur.txt.

    Expliquer l'action de ce script sur le fichier initial.

La lecture et l'écriture d'un fichier se fait en trois étapes :

L'ouverture s'effectue avec la fonction open qui admet deux paramètres :

La fonction open créé un objet-fichier manipulable en Python :

Pour créer un saut de lignes, il suffit de saisir la chaîne de caractères : \n.

Pour stocker dans une variable la liste de toutes les lignes d'un fichier (pas trop lourd pour ne pas surcharger la mémoire vive de votre ordinateur), il suffit d'utliser la méthode readlines().

La fermeture s'effectue sur l'objet-fichier avec la méthode close.

L'encodage cp1252 et l'encodage utf-8

Commençons par créer deux fichiers pour travailler ces encodages :

fic=open('test1.txt','w')
fic.write("Bonjour\n")
fic.close()

fic=open('test2.txt','w')
fic.write('é\tè\tù\tê\tà\n')
fic.close()

                

Ouvrir les fichiers test1.txt et test2.txt avec Visual Studio Code. Qu'observez vous?

Quand vous êtes sur le fichier test2.txt. Cliquer sur utf-8 en bas de votre application Visual Studio Code choisissez l'encodage windows 1252.

Par défaut l'encodage choisi par Python dès que votre chaine de caractère va contenir des accents elle sera codée avec la méthode write en cp1252. C'est l'encodage windows 1252 ou ANSI.

Pour régler ce problème, nous allons demander à Python d'encoder en utf-8. Puis d'utiliser la méthode write avec l'argument 'wb'.

ch='é\tè\tù\tê\tà\n'
ch=ch.encode('utf-8')
f=open('test3.txt','wb')
f.write(ch)
f.close()

Ouvrir le fichier test3.txt avec Visual Studio Code.

L'argument "wb" dans la fonction open permet d'écrire en mode binaire, en effet l'encodage utf-8 est une suite d'octets( ou bytes)

Il faudra faire attention à cela quand vous ferez du Web en codant en Python.

Observer à quoi ressemble l'encodage cp1252 et l'encodage utf-8 à l'aide d'un éditeur binaire comme :

ch='é\tè\tù\tê\tà\n'
ch.encode('cp1252')

ch='é\tè\tù\tê\tà\n'
ch.encode('utf-8')

Navigation dans l'arborescence des répertoires

Répertoire courant de travail

Lorsque vous exécuter un script Python depuis un IDLE, comme Edupython ou Jupyter, les fichiers créés et manipulés par Python seront pris en charge à partir du répertoire courant, celui-ci est habituellement celui où se trouve le script lui-même.

Pour la localisation du répertoire courant de travail dans l'arborescence de votre ordinateur, il suffit d'utiliser la méthode getcwd (pour get current working directory = obtenir le répertoire courant de travail) de la bibliothèque os (pour operating system = système d'exploitation).

Reproduire et exécuter le code suivant :

from os import getcwd
print(getcwd())

Les données sont stockées sur le disque dur de votre ordinateur à travers une arborescence de répertoires (des conteneurs) contenant chacun soir d'autres répertoires, soit des fichiers (du contenu).

arborescence windows

source : http://wikicyb.fr

Pour accéder au répertoire nommé Bureau, celui dont le contenu est visible directement sur le bureau de Windows, de l'Utilisateurs Michel il suffit :

Pour cela, il suffit de préciser le chemin d'accès qui s'écrit sous Windows :

 C:\Users\Michel\desktop

Sous Windows, chaque nom de répertoire est séparé d'un symbole antislash \.
Sous Windows, le nom français affiché Utilisateurs est à remplacer par son nom anglais Users ; de même Bureau est remplacé par desktop.
Sous Linux, chaque nom de répertoire est séparé d'un symbole slash /.

En Python, il faut utiliser le symbole slash / ; Python effectuera automatiquement les conversionns nécessaires suivant le système d'exploitation que vous utilisez.

Chaque nom séparé d'un symbole antislash \ ou slash / (suivant votre système d'exploitation) correspond à un nom de répertoire. Celui dont le nom est à droite se trouvant inclus dans celui dont le nom est à gauche. On parle de répertoire-parent (pour celui de droite) et de répertoire-enfant (pour celui de gauche) comme l'illustre le schéma ci-dessous :

http://nathalie.payet.pagesperso-orange.fr/fiches/structuredonnees/images/pyramidec.png

source : Nathalie Payet

Descendre vers un répertoire-enfant

Vous pouvez imposer un autre lieu de travail avec la fonction chdir du module os :

Il existe deux méthodes pour descendre dans l'arborescence vers un dossier enfant :

Première méthode : avec un chemin absolu :

Un chemin absolu est un chemin détaillant le chemin en partant de la racine.

Pour descendre d'un niveau dans l'arborescence, il suffit de saisir dans chdir le nom du chemin complet qui permet d'accéder au répetoire voulu.

Si le chemin d'accès au répertoire courant initial était, sous Windows, C:\users\NSI\python\, celui du repértoire-enfant dans lequel vous voulez être désormais est C:\users\NSI\python\fichiers, Pour descendre dans le répertoire nommé fichiers, il suffit d'écrire :

from os import chdir
chdir("C:/users/NSI/python/fichiers")

Il est nécessaire de changer des antislashes \ de Windows en des slashes / sous Python.

  1. Déterminer grâce à un script en Python votre répertoire courant de travail actuel.

  2. Avec l'explorateur des dossiers, chercher l'existence d'un éventuel dossier enfant au répertoire courant de travail. S'il existe déjà un, noter son nom, sinon en créer un nouveau.

  3. Compléter votre script afin de travailler dans ce répertoire enfant.

  4. Vérifier votre nouveau répertoire courant de travail.

  5. Revenir au répertoire-parent en réécrivant comme chemin absolu celui du répertoire courant de travail initial.

Deuxième méthode : avec un chemin relatif :

Un chemin relatif est un chemin détaillant le chemin en partant du répertoire courant.

Pour descendre d'un niveau dans l'arborescence, il suffit de saisir dans chdir la chaîne de caractères donnant le nom du répertoire-enfant.

Si le chemin d'accès au répertoire courant initial était, sous Windows, C:\users\NSI\python\, celui du repértoire-enfant dans lequel vous voulez être désormais est C:\users\NSI\python\fichiers, Pour descendre dans le répertoire nommé fichiers, il suffit d'écrire :

from os import chdir
chdir("fichiers")

Il est nécessaire de changer des antislashes \ de Windows en des slashes / sous Python.

  1. Déterminer grâce à un script en Python votre répertoire courant de travail actuel.

  2. Avec l'explorateur des dossiers, chercher l'existence d'un éventuel dossier enfant au répertoire courant de travail. Noter son nom (sinon en créer un nouveau).

  3. Compléter votre script afin de travailler dans ce répertoire enfant.

  4. Vérifier votre nouveau répertoire courant de travail.

  5. Revenir au répertoire-parent en réécrivant comme chemin absolu celui du répertoire courant de travail initial.

Remonter vers un répertoire-parent

Il existe deux méthodes pour remonter dans l'arborescence vers un dossier parent :

Première méthode : avec un chemin absolu :

Pour remonter d'un niveau dans l'arborescence, il suffit de saisir dans chdir le nom du chemin complet qui permet d'accéder au répetoire voulu.

Si le chemin d'accès au répertoire courant initial était, sous Windows, C:\users\NSI\python\fichiers\, celui du repértoire-parent dans lequel vous voulez être désormais est C:\users\NSI\python, Pour descendre dans le répertoire nommé python, il suffit d'écrire :

from os import chdir
chdir("C:/users/NSI/python")

Là encore, il est nécessaire de changer des antislashes \ de Windows en des slashes / sous Python.

  1. Déterminer grâce à un script en Python votre répertoire courant de travail actuel.

  2. Compléter votre script afin de travailler dans le répertoire-parent.

  3. Vérifier votre nouveau répertoire courant de travail.

  4. Revenir au répertoire-enfant, soit avec un chemin absolu, soit avec un chemin relatif.

Deuxième méthode : avec un chemin relatif :

Pour remonter d'un niveau dans l'arborescence, il suffit de saisir dans chdir la chaîne de caractères "..".

Si le chemin d'accès au répertoire courant initial était, sous Windows, C:\users\NSI\python\fichiers\, celui du repértoire-parent dans lequel vous voulez être désormais est C:\users\NSI\python, Pour descendre dans le répertoire nommé python, il suffit d'écrire :

from os import chdir
chdir("..")

Là encore, il est nécessaire de changer des antislashes \ de Windows en des slashes / sous Python.

  1. Déterminer grâce à un script en Python votre répertoire courant de travail actuel.

  2. Compléter votre script afin de travailler dans le répertoire-parent.

  3. Vérifier votre nouveau répertoire courant de travail.

  4. Remonter encore d'un niveau dans l'arborescence.

  5. Revenir au répertoire initial, soit avec un chemin absolu, soit avec un chemin relatif.

Exercices

Écrire un code en langage Python qui crée un fichier exercice21.txt dans lequel apparait le contenu suivant :

Voici le contenu de mon premier fichier :
Ceci est la ligne 2,
Ceci est la ligne 3,
Ceci est la ligne 4,
Ceci est la ligne 5,
Ceci est la ligne 6,
Ceci est la ligne 7,
Ceci est la ligne 8,
Ceci est la ligne 9,
Ceci est la ligne 10,
J'espère qu'il vous a plu !

  • Condensez votre code en remarquant que plusieurs lignes sont similaires,

  • seules des chaînes de caractères sont admises comme argument de la méthode write() ; pas directement d'entier ou de flottant : changer le typage.

  • N'oubliez pas de fermer le fichier-objet à la fin du programme.

Code de déblocage de la correction :

  1. Télécharger ici et placer dans le répertoire de travail courant le fichier "poeme_Hugo.txt".

  2. Écrire un script en Python qui :

    • permet d'ouvrir le fichier "poeme_Hugo.txt",

    • qui en créé une copie nommée "poeme_espace.txt",

    • copie dans laquelle chaque ligne vide sera doublée et qui contient le nom de l'auteur en toute dernière ligne : Victor Hugo.

  3. Vérifier la fonctionnalité du script créé en ouvrant le fichier "poeme_espace.txt" créé par le script.

Code de déblocage de la correction :

Le fichier b6_exo2_debut.csv accessible ici contient la liste des masses des objets, en kilogrammes, qui doivent quitter un entrepôt par camion.

  1. Une fois ce fichier téléchargé et l'installer dans le répertoire courant de travail.

  2. Écrire un programme qui :

    • ouvre le fichier b6_exo2_debut.csv

    • affiche l'ensemble des masses des objets

    • calcule la masse totale des objets quittant l'entrepôt

    • affiche la masse totale

    • affiche si un seul camion pouvant transporter 45 tonnes peut suffire ou non pour emporter l'ensemble des objets (on néglige ici l'espace occupé par chaque objet).

  • La première ligne du fichier csv contient l'en-tête ; les données apparaissent à partir de la ligne 2.

  • Penser à convertir le données lues sous forme de nombre entier afin de pouvoir effectuer des opérations arithmétiques.

Code de déblocage de la correction :

Lors d'un concours international, une liste de 100 candidats a déjà été présélectionnée. Des données concernant ces candidats se trouvent dans le fichier b6_exo3_debut.csv accessible ici. Le séparateur y est la virgule : ,.

  1. Une fois ce fichier téléchargé et l'installer dans le répertoire courant de travail.

  2. Écrire un programme qui :

    • ouvre le fichier b6_exo3_debut.csv

    • crée un nouveau fichier nommé extrait.csv

    • complète ce nouveau fichier extrait.csv

      • de l'entête initiale de b6_exo3_debut.csv,

      • suivie des lignes correspondant à des cadidats âgés d'au moins 20 ans ; l'âge se trouve dans la deuxième colonne du fichier.

      • Pensez à utiliser la fonction open de deux manières pour manipuler parallèlement deux fichiers,

      • Utiliser la méthode split,

      • Pensez à transtyper sous forme d'entier les âges.

      Si vous avez déjà ouvert sur un tableur le fichier b6_exo3_debut.csv, il se peut que le séparateur virgule est alors été changé en séparateur tabulation.
      Dans ce cas, il faudra remplacer dans votre programme split(",") par split("\t").

      Ouvrir le fichier extrait.csv ainsi créé pour vérifier son contenu : il ne doit contenir que 96 lignes.

  • La première ligne du fichier csv contient l'en-tête ; les données apparaissent à partir de la ligne 2.

  • Penser à convertir le données lues sous forme de nombre entier afin de pouvoir effectuer des opérations arithmétiques.

Code de déblocage de la correction :

QCM

Questions issues de la Banque Nationale de Sujets

Propriétaire des ressources ci-dessous : ministère de l'Éducation nationale et de la jeunesse, licence CC BY SA NC.

Voici une sélection de questions issues de la banque nationale de sujets, répondez à ces questions (attention, cette sélection n'est pas exhaustive).

Quel est un avantage du codage UTF8 par rapport au codage ASCII ?

Réponses :

A- Il permet de coder un caractère sur un octet au lieu de deux.

B- Il permet de coder les majuscules.

C- Il permet de coder tous les caractères.

D- Il permet de coder différentes polices de caractères.

Code de déblocage de la correction :

Parmi les noms suivants, lequel n'est pas celui d'une méthode d'encodage des caractères ?

Réponses :

A- UTF-16

B- ASCII

C- Arial

D- Unicode

Code de déblocage de la correction :

Laquelle de ces affirmations concernant le codage UTF-8 des caractères est vraie ?

Réponses :

A- Le codage UTF-8 est sur 7 bits.

B- Le codage UTF-8 est sur 8 bits.

C- Le codage UTF-8 est sur 1 à 4 octets.

D- Le codage UTF-8 est sur 8 octets.

Code de déblocage de la correction :

Le code ASCII permet de représenter en binaire les caractères alphanumériques. Quel est son principal inconvénient ?

Réponses :

A- Il utilise beaucoup de bits.

B- Il ne différencie pas les majuscules des minuscules.

C- Il ne représente pas les caractères accentués.

D- Il n'est pas compatible avec la plupart des systèmes informatiques.

Code de déblocage de la correction :

Dans le bloc <head> d'un fichier HTML, afin d'encoder les caractères avec le standard Unicode/UTF-8 on insère la ligne :

<meta http-equiv="Content -Type" content="text/html; charset=UTF-8">

Pourquoi cela ?

Réponses :

A- UTF-8 est l'encodage Linux.

B- ASCII est une vieille norme, il est temps d'en changer.

C- UTF-8 est une norme conçue pour permettre un affichage correct des caractères spéciaux sur tout système d'exploitation.

D- UTF-8 est un encodage qui protège mieux contre le piratage informatique.

Code de déblocage de la correction :

Autres QCM

Les QCM suivants sont des QCM modifiés à partir de QCM se trouvant sur le site https://genumsi.inria.fr.

Combien de caractères contient le codage ASCII ?

Réponses :

A- 127.

B- 128.

C- 255.

D- 258.

Code de déblocage de la correction :

Sur une page web qui s’affiche sur notre navigateur on peut lire : « Ce phénomène est dû à l'expansion ».
Quelle peut être la cause des affichages particuliers de cette page ?

Réponses :

A- L'encodage des caractères n'est pas celui attendu par le navigateur.

B- L'encodage des caractères n'est pas celui attendu par le serveur.

C- Le texte original est en anglais.

D- La connexion Internet a connu une coupure : une partie des données n'est pas parvenue au navigateur.

Code de déblocage de la correction :

Quelle instruction Python permet de renvoyer le caractère correspondant au code décimal 76 ?

Réponses :

A- ord(76).

B- ord(0x76).

C- chr(76).

D- chr(0x76).

Code de déblocage de la correction :

On considère le codes ASCII en écriture hexadécimale, c'est-à-dire en base 16.
Le code ASCII de la lettre A est 0x41, celui de la lettre B est 0x42, celui de la lettre C est 0x43, ...
Quel est le code ASCII, en hexadécimal, de la lettre Z, c'est-à-dire de la $26^{e}$ lettre de notre alphabet ?

Réponses :

A- 0x1A

B- 0x5A

C- 0x66

D- 0x90

Code de déblocage de la correction :

Parmi les caractères suivants, lequel n'appartient pas à la table ASCII ?

Réponses :

A- @

B- a

C- à

D- A

Code de déblocage de la correction :

Générateur aléatoire de questions sur les réseaux

Il faut actualiser la page pour changer de question. Propriétaire de la ressource : le site GeNumsi en licence CC BY_NC-SA

Savoirs et savoir-faire

  1. Savoir que l'on utilise des systèmes d'encodage (ASCII, Unicode, ...) pour représenter un texte dans une machine.

  2. Savoir que chaque encodage peut être écrit en binaire, hexédécimale ou en décimale.

  3. savoir l'intérêt de différents encodages (au niveau poids, richesse, ...),

  1. savoir convertir un caractère en binaire ou hexadécimale, un système d'encodage étant fixé,

  2. Savoir ouvrir en lecture ou en écriture un fichier texte sous Python.

  3. Savoir modifier un fichier texte sous Python.

  4. Savoir naviguer dans l'arborescence de ses répertoires avec des chemins absolues ou relatifs

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International